#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
//struct student
//{
//	int order;
//	char name[30];
//};
//struct node
//{
//	struct student data;
//	struct node* next;
//};
//typedef struct linkqueue
//{
//	struct node* front;
//	struct node* rear;
//}lq;
//lq* queueinit()
//{
//	lq* p = (lq*)malloc(sizeof(lq));
//	if (p == NULL)
//	{
//		printf("malloc fail");
//		return NULL;
//	}
//	p->front = p->rear = NULL;
//	return p;
//}
//bool is_empty(lq* p)
//{
//	if (p->front == NULL && p->rear == NULL)
//		return true;
//	else
//		return false;
//}
//bool enqueue(lq* p, int o, char* n)
//{
//	struct node* newnode = (struct node*)malloc(sizeof(struct node));
//	if (newnode == NULL)
//	{
//		printf("malloc fail");
//		return false;
//	}
//	newnode->data.order = o;
//	strcpy(newnode->data.name, n);
//	newnode->next = NULL;
//	if (is_empty(p))
//	{
//		p->front = p->rear = newnode;
//	}
//	else
//	{
//		p->rear->next = newnode;
//		p->rear = newnode;
//	}
//	return true;
//}
//bool out_queue(lq* p, struct student* val)
//{
//	if (is_empty(p))
//		return false;
//	*val = p->front->data;
//	struct node* tmp = p->front->next;
//	p->front->next = NULL;
//	free(p->front);
//	p->front = tmp;
//	if (p->front == NULL)
//		p->rear = p->front;
//	return true;
//}
//void show(lq* p)
//{
//	if (is_empty(p))
//		return;
//	struct node* tmp = p->front;
//	while (tmp != p->rear)
//	{
//		printf("num:%d name:%s\n", tmp->data.order, tmp->data.name);
//		tmp = tmp->next;
//	}
//	printf("num:%d name:%s\n", p->rear->data.order, p->rear->data.name);
//}
//void destory(lq* p)
//{
//	if (is_empty(p))
//		return;
//	struct node* tmp = p->front;
//	struct node* q = p->front->next;
//	while (tmp != p->rear)
//	{
//		free(tmp);
//		tmp = q;
//		q = q->next;
//	}
//	free(p->rear);
//	p->front = p->rear = NULL;
//}
//int main()
//{
//	int order = 0;
//	struct student c;
//	int num = 0;
//	char name[30] = { 0 };
//	lq* pq = queueinit();
//	while (1)
//	{
//		printf("1.quhao,2.jiaohao3.xianshi4.xiaban\n");
//		scanf("%d", &num);
//		switch (num)
//		{
//		case 1:
//			printf("qingshurunidexinming\n");
//			scanf("%s", name);
//			enqueue(pq, ++order, name);
//			break;
//		case 2:
//			out_queue(pq, &c);
//			printf("num:%d name:%s", c.order, c.name);
//			break;
//		case 3:
//			show(pq);
//			break;
//		case 4:
//			destory(pq);
//			order = 0;
//			break;
//		}
//	}
//	return 0;
//}

struct node
{
	int data;
	struct node* next;
};
void linkstack(struct node** t)
{
	*t = NULL;
}
bool push(struct node** t, int d)
{
	struct node* newnode = (struct node*)malloc(sizeof(struct node));
	if (newnode == NULL)
	{
		printf("malloc fail");
		return false;
	}
	newnode->data = d;
	newnode->next = NULL;
	newnode->next = (*t);
	*t = newnode;
	return true;
}
bool is_empty(struct node* t)
{
	if (t == NULL)
		return true;
	else
		return false;
}
bool pop(struct node** t, int* val)
{
	if (is_empty(*t))
		return false;
	struct node* p = *t;
	*val = (*t)->data;
	*t = p->next;
	free(p);
	return true;
}
void dec_to_oct(int n)
{
	if (n <= 0)
	{
		printf("n is invaild");
		return;
	}
	struct node* top;
	linkstack(&top);
	while (n != 0)
	{
		push(&top, n % 8);
		n = n / 8;
	}
	int data = 0;
	while (!is_empty(top))
	{
		pop(&top, &data);
		printf("%d", data);
	}
	printf("\n");
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	dec_to_oct(num);
	return 0;
}